package com.base.doublepoint.slidingwindows;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 594. 最长和谐子序列
 *  和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
 *
 * 现在，给你一个整数数组 nums ，请你在所有可能的子序列中找到最长的和谐子序列的长度。
 *
 * 数组的子序列是一个由数组派生出来的序列，它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/longest-harmonious-subsequence
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @author leon
 * @date 2021年11月20日 20:24
 */
public class FindLHS {
    public int findLHS(int[] nums){
        Arrays.sort(nums);
        int left = 0,right=0;
        int max = 0;
        while (right<nums.length){
            while (right+1< nums.length&&nums[right+1]-nums[left]<=1){
                right++;
            }
            if (nums[right]!=nums[left])
            max = Math.max(max,right-left+1);

            while (left+1< nums.length&&nums[left+1]==nums[left]){
                left++;
            }
            left++;
            right++;

        }
        return max==1?0:max;

    }

    public int findLHS1(int[] nums) {
        Arrays.sort(nums);
        int begin = 0,res = 0;
        for(int end = 0;end < nums.length;end++){
            while(nums[end] - nums[begin] > 1)
                begin++;
            if(nums[end] - nums[begin] == 1)
                res = Math.max(res,end - begin + 1);
        }
        Set<String> s =new HashSet<>();
        return res;
    }

    public static void main(String[] args) {
        System.out.println(new FindLHS().findLHS(new int[]{2,2,2}));
    }
}
